how does typescript work